import axios, { AxiosRequestConfig, ResponseType, AxiosInstance } from 'axios'
import { message as Message, Modal } from 'antd'
import { IDictionary } from '@/typings/global'

const TIMEOUT = 40000

const MIME_TYPE: IDictionary<ResponseType> = { // 格式规则
  JSON: 'json',
}

const createInstance = () => { //创建一个自定义axios配置
  const instance = axios.create({
    baseURL: '/api', // 自动加载请求的url前面 例如 请求api/url 只需填写/url即可
    withCredentials: true, // 表示跨域时 是否需要凭证
    timeout: TIMEOUT, // 时间，如果请求超过了该时间，则自动切断请求
    responseType: MIME_TYPE.JSON, // 服务器响应的数据类型
  })
  return instance
}

const toastError = (error: any) => {
  const { response, message } = error

  Message.error(response?.data?.message || message)

  return Promise.reject(error)
}

interface Instance extends AxiosInstance {
  (config: AxiosRequestConfig): Promise<any>
}

export const requestWithoutErrorToast: Instance = createInstance()

const request: Instance = createInstance()

/* 请求拦截器 具体看官网*/
request.interceptors.request.use((config) => {
  config.headers.Token = ''
  config.headers.Username = '12'
  return config
}, toastError)

/* 响应拦截器 */
request.interceptors.response.use((res:any):any => {
  return Promise.resolve(res.data)
}, toastError)

export default request
